package org.simp.handler;

import org.simp.context.SimpContext;
import org.simp.core.message.SimpMessage;
import org.simp.core.request.SimpRequest;
import org.simp.interceptor.SimpHandlerInterceptor;
import org.simp.router.RouterInterceptor;
import org.simp.session.SimpSession;

/**
 * @author zhuhaitao at 2014-5-23
 *
 * 
 */
public interface SimpHandler {

	/**
	 * 
	 * @param context
	 * @param routerInterceptor
	 * @param simpHandlerInterceptor
	 */
	public void init(SimpContext context,RouterInterceptor routerInterceptor ,SimpHandlerInterceptor simpHandlerInterceptor);
	/**
	 * 发送消息
	 * @param sm
	 * @author zhuhaitao at 2014-5-23
	 */
	public void send (SimpMessage sm);
	
	
	/**
	 * 发送消息并等待seconds秒
	 * @param message
	 * @param seconds
	 * @return
	 *  @Author zhuhaitao at 2014年6月25日
	 *
	 */
	public SimpRequest sendAndWaitResponse(SimpMessage message,int seconds);
	
	/**
	 * 发送消息并等待60秒
	 * @param message
	 * @return
	 *  @Author zhuhaitao at 2014年6月25日
	 *
	 */
	public SimpRequest sendAndWaitResponse(SimpMessage message);
	
	
	/**
	 * 获取context
	 * @return
	 * @author zhuhaitao at 2014-5-23
	 */
	public SimpContext getContext();
	
	public SimpSession getSimpSession(long sessionId);
	/**
	 * 根据，用户Id，或者服务器节点名获取session，用户可能有多个session，用在ServerHandler
	 * @param name
	 * @return
	 * @author zhuhaitao at 2014-5-26
	 */
	public SimpSession[] getSessionByName(String name);
	/**
	 * 根据类型或者当前连接的session，用在ServerHandler
	 * @param nodeType
	 * @return
	 * @author zhuhaitao at 2014-5-28
	 */
	public SimpSession[] getSessionByType(String nodeType);
}
